package admin_role_users

import (
	"gitee.com/theegg/go-brick/app/service/app"
)

var AllAdminRoleUsersCacheKey string = "admin_role_users_all"

// 获取 用户拥有的角色 单角色
// @params adminUserId int64
// @return int64, error
func GetRoleIdByUserId(adminUserId int64) (int64, error) {
	adminRoleUsers, err := GetAllItemsFromCache()
	if err != nil {
		return 0, app.NewError(err)
	}

	for _, role := range adminRoleUsers {
		if role.UserId == adminUserId {
			return role.RoleId, nil
		}
	}

	return 0, app.NewError("不存在角色ID")
}

// 获取指定 单个角色 下的 所有 用户ID
// @params roleId int64 角色ID
// @return []int64, error
func GetUserIdsByRoleId(roleId int64) ([]int64, error) {
	var ids []int64
	errIds := app.Db().Table("admin_role_users").Where("role_id = ?", roleId).Cols("user_id").Find(&ids)
	if errIds != nil {
		return nil, app.NewError(errIds)
	}
	return ids, nil
}

// 获取指定　多个角色 下的 所有 用户ID
// @params roleId []int64 角色ID数组
// @return []int64, error
func GetUserIdsByRoleIds(roleIds []int64) ([]int64, error) {
	var ids []int64
	errIds := app.Db().Table("admin_role_users").In("role_id", roleIds).Cols("user_id").Find(&ids)
	if errIds != nil {
		return nil, app.NewError(errIds)
	}
	return ids, nil
}

// 绑定用户到角色上
// @params roleId int64
// @params userId int64
// @return bool error
func BindUserToRole(roleId int64, userId int64) (bool, error) {
	// 插入数据
	model := new(AdminRoleUsers)
	model.RoleId = roleId
	model.UserId = userId

	affected, err := app.Db().Insert(model)

	if err != nil {
		return false, app.NewError(err)
	}

	if affected != 1 {
		return false, app.NewError("新增用户错误(0x001)")
	}

	return true, nil
}

// @title 从数据库获取所有的 管理员｜角色　关系数据
// @return map[int64]AdminRoleUsers
func GetAllAdminRoleUsersFromDb() (map[int64]*AdminRoleUsers, error) {
	adminRoleUsers := make(map[int64]*AdminRoleUsers)
	err := app.Db().Find(&adminRoleUsers)
	if err != nil {
		return nil, app.NewError(err)
	}

	return adminRoleUsers, nil
}
